package DataStructure.stringOps.stringAndSequence;

import Common.Constant.C;
import Common.Utils.UTFactory;
import org.junit.Test;

/**
 * @author 蔚蔚樱
 * @version 1.0
 * @date 2018-8-28 下午02:14:14
 * @author—Email micromicrohard@outlook.com
 * @description IP地址转化
 * 将 数字 类型的IP地址转化成 string
 * 示例：256 -> "0.0.1.0"
 * @attention 考虑到int类型的最大长度为32位，在计算的时候会出现问题，因此乘积选用long类型来存储。
 */
public class TransInt2IP {

    @Test // 验证功能：从数据库获取测试数据，用于单元测试
    public void TestFunc() throws Exception {
        UTFactory.FullTest(this.getClass());
    }

    @Test // 调试功能 : 用于复现错误的测试案例
    public void DoubleTrack() throws Exception {
        String input = "";
        String output = "";
        UTFactory.DebugTest(this.getClass(), input, output);
    }

    //int数转IP
    public String transMethod(long ipExpr) {
        if (ipExpr < 0) {
            return C.ErrorExpr;
        }
        StringBuilder intExpr = new StringBuilder();
        int hex = 8;
        int count = 1;
        // 2.3.1.5
        for (int j = 3; j > 0; j--) {
            intExpr.append(ipExpr / ((long) count << hex * j));
            ipExpr %= ((long) count << hex * j);
            intExpr.append(".");
        }
        return intExpr.append(ipExpr).toString();
    }
}
